1 /** 2 * Copyright 2008 WebPhotos 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package net.sf.webphotos.gui.util; 17 18 import javax.swing.table.*; 19 import net.sf.webphotos.Album; 20 import net.sf.webphotos.PhotoDTO; 21 import net.sf.webphotos.gui.PainelWebFotos; 22 23 /** 24 * Gera o modelo da tabela de fotos. 25 */ 26 public class TableModelFoto extends AbstractTableModel { 27 28 private static final long serialVersionUID = -3797898104363613961L; 29 private static final TableModelFoto instancia = new TableModelFoto(); 30 private Object[][] fotoTabela; 31 private String[] fotoColunas; 32 33 private TableModelFoto() { 34 } 35 36 /** 37 * Retorna a instância da própria classe. 38 * @return Retorna um TableModelFoto. 39 */ 40 public static TableModelFoto getModel() { 41 return instancia; 42 } 43 44 /** 45 * Armazena os dados de fotos em duas variáveis da classe. 46 * Na variável fotoTabela, as fotos e seus dados específicos. 47 * E na variável fotoColunas somente os dados específicos. 48 */ 49 public void update() { 50 fotoTabela = Album.getAlbum().getFotosArray(); 51 fotoColunas = Album.getAlbum().getFotosColunas(); 52 } 53 54 /** 55 * Recebe um número referente a uma coluna e retorna o valor da coluna através do vetor fotoColunas. 56 * @param column Número referente a coluna. 57 * @return Retorna o valor contido na coluna. 58 */ 59 @Override 60 public String getColumnName(int column) { 61 return fotoColunas[column]; 62 } 63 64 /** 65 * Retorna o total de colunas, contando o número de posições no vetor fotoColunas. 66 * @return Retorna o total de colunas. 67 */ 68 @Override 69 public int getColumnCount() { 70 if (fotoColunas == null) { 71 return 0; 72 } 73 return fotoColunas.length; 74 } 75 76 /** 77 * Retorna o total de linhas, contando o número de posições no vetor fotoTabela. 78 * @return Retorna o total de linhas. 79 */ 80 @Override 81 public int getRowCount() { 82 if (fotoTabela == null) { 83 return 0; 84 } 85 return fotoTabela.length; 86 } 87 88 /** 89 * Busca um valor contido na matriz fotoTabela e retorna um Object. 90 * Recebe como parâmetro um índice de linha e um de coluna para efetuar a procura. 91 * @param line Número da linha. 92 * @param column Número da coluna. 93 * @return Retorna o valor encontrado em um Object. 94 */ 95 @Override 96 public Object getValueAt(int line, int column) { 97 return fotoTabela[line][column]; 98 } 99 100 /** 101 * Recebe um valor e os índices da matriz e seta esse valor na matriz fotoTabela. 102 * Checa se a foto possui ID ou nome, depois testa se o valor é de legenda ou crédito e implanta na matriz fotoTabela. 103 * @param value Valor a ser implantado. 104 * @param line Número da linha. 105 * @param column Número da coluna. 106 */ 107 @Override 108 public void setValueAt(Object value, int line, int column) { 109 // testar para verificar se fotoID é um número ou um nome de arquivo 110 int fotoID = 0; 111 String nomeFoto = ""; 112 try { 113 fotoID = Integer.parseInt(fotoTabela[line][0].toString()); 114 } catch (Exception e) { 115 nomeFoto = fotoTabela[line][0].toString(); 116 } 117 118 // Qual campo está editando ? 119 if (column == 1) { 120 // usuário está editando coluna legenda 121 // atualiza o modelo 122 fotoTabela[line][column] = value; 123 // atualiza objeto foto 124 if (fotoID > 0) { 125 Album.getAlbum().getFoto(fotoID).setLegenda((String) value); 126 } else { 127 Album.getAlbum().getFoto(nomeFoto).setLegenda((String) value); 128 } 129 // ajusta o texto da legenda 130 PainelWebFotos.getTxtLegenda().setText((String) value); 131 } else if (column == 2) { 132 // usuário está editando coluna crédito (combobox) 133 fotoTabela[line][column] = value; 134 if (fotoID > 0) { 135 Album.getAlbum().getFoto(fotoID).setCreditoNome((String) value); 136 } else { 137 Album.getAlbum().getFoto(nomeFoto).setCreditoNome((String) value); 138 } 139 int indice = PhotoDTO.getLstCreditosIndex((String) value); 140 // soma 1 ao indice, pois o primeiro value é espaço vazio 141 //PainelWebFotos.getLstCreditos().setSelectedIndex(indice + 1); 142 // FIXME : Retornar comportamento original com linha em branco 143 PainelWebFotos.getLstCreditos().setSelectedIndex(indice); 144 } 145 } 146 147 /** 148 * Checa se o número de colunas é maior que zero e retorna <I>true</I>, caso contrário retorna <I>false</I>. 149 * TODO: avaliar a funcionalidade desse método. 150 * @param line Número da linha. 151 * @param column Número da coluna. 152 * @return Retorna um valor lógico. 153 */ 154 @Override 155 public boolean isCellEditable(int line, int column) { 156 if (column > 0) { 157 return true; 158 } 159 return false; 160 } 161 162 /** 163 * Retorna a classe do objeto encontrado na matriz fotoTabela. 164 * Busca a partir do valor do número da coluna recebido como parâmetro. 165 * @param column Número da coluna. 166 * @return Retorna uma classe. 167 */ 168 @Override 169 public Class<? extends Object> getColumnClass(int column) { 170 return fotoTabela[0][column].getClass(); 171 } 172 173 @Override 174 public Object clone() throws CloneNotSupportedException { 175 throw new CloneNotSupportedException("Singleton Object"); 176 } 177 }